package cn.changeforyou.web.dao.mybatis.ext.metaInfo;

import cn.changeforyou.web.dao.mybatis.ext.metaInfo.condition.ConditionType;
import cn.changeforyou.web.dao.mybatis.ext.metaInfo.condition.SubWherePosition;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

/**
 * 用于映射Condition, Between, BracketWrapper,后面可能考虑集成ExpressionCondition
 * 因为有一个字段有多个Condition的情况, 所以一个Field可能有多个ConditionFieldMetaInfo
 *
 * @author zhyu
 * @version 1.0
 * @date 2022/2/16 13:50
 */
@Data
public class ConditionFieldMetaInfo implements FieldColumnInfo, WhereSubSentenceMetaInfo {
    /**
     * 字段类的类对象
     */
    private Class fieldClass;

    /**
     * 给括号等使用， 默认值是fieldName,
     */
    private String key;

    /**
     * 字段名
     */
    private String fieldName;


    /**
     * 条件类型
     */
    private ConditionType type;

    /**
     * 数据库中 列名
     */
    private String columnName;

    /**
     * 是否是或, 默认and
     */
    private boolean or;

    /**
     * 用于between
     */
    private SubWherePosition position;

    private JdbcType jdbcType;

    private Class<? extends TypeHandler> typeHandler;

    /**
     * 追加 or列 is null
     * 如 username not like concat('xx', '%')的情况 如果该字段is null 那么该行业不会被选出来。 但一般业务中， 如果添加了表否定的添加，
     * 我们希望is null 也可以被选中， 这是设置这个方法的值为true即可
     * @return
     */
    boolean appendOrColumnIsNull;

    /**
     * sql语句
     */
    private String sql;

    /**
     * 表的别名
     */
    private String tableAlias;

    /**
     * 行的别名
     */
    private String columnNameAlias;
}
